package com.itheima.reggie.mapper;

import com.itheima.reggie.dto.DishDto;
import com.itheima.reggie.entity.Dish;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * @Author: dw
 * @Date 2022/3/10 11:06
 */
public interface DishMapper {

    /**
     * 根据当前分类的ID，查询该分类下是否存在菜品
     * mapper的方法添加@param注解在什么情况需要添加：
     *      1. mapper方法是有多个参数的时候（两个以及两个以上的参数需要添加）
     *      2. mapper方法只有一个参数，并且这个参数是简单类型，而且你还使用了动态sql也是需要使用@Param
     *      3. mapper方法只有一个参数，参数是引用类型，也使用了动态sql，不需要添加。
     *      4. 遍历map或者list集合,数组的时候也是需要添加的。
     *
     * @param categoryId 菜品id
     * @return
     */
    Long findCountById(Long categoryId);

    /**
     * 分页条件展示菜品(分表查询表2)
     */
    List<Dish> findAll(@Param("name") String name);

    /**
     * 分页条件查询（连表查询）
     * @param name
     * @return
     */
    List<DishDto> findAllByPage(@Param("name") String name);

    /**
     * 根据菜品名字查询菜品
     * @param dishDto
     * @return
     */
    @Select("select * from dish where `name`=#{name}")
    Dish findByName(DishDto dishDto);

    /**
     * 新增菜品
     * 因为一个菜品关联很多口味，所以需要提取主键id作为关联
     * 将数据库中的主键id列赋值给实体类的id（可以使用注解@Options）
     * @param dishDto
     * @return
     */
    Integer save(DishDto dishDto);

    /**
     * 根据id回显页面
     * @param id
     * @return
     */
    DishDto findById(Long id);

    /**
     * 修改菜品
     * @param dishDto
     * @return
     */
    Integer update(DishDto dishDto);

    /**
     * 批量修改状态
     * @return
     */
    Integer updateStatus(@Param("status") Integer status,
                         @Param("ids") List<Long> ids);


    /**
     * 根据菜系id查询所有菜品（套餐用）
     * @param categoryId
     * @return
     */
    List<Dish> findByCategoryId(Long categoryId);

    /**
     * 根据菜系id和状态码查询所有菜品
     * @param categoryId
     * @param status
     * @return
     */
    List<Dish> findCategoryIdAndStatus(@Param("categoryId") Long categoryId,
                                       @Param("status") Integer status);


}
